//
//  BinaryTree.cpp
//  labuladong
//
//  Created by 刘振舟 on 2023/5/23.
//

#include "BinaryTree.hpp"

int getTreeMaxDepth(TreeNode* root) {
    if (root == nullptr) {
        return 0;
    }
    return fmax(getTreeMaxDepth(root->left), getTreeMaxDepth(root->right)) + 1;
}


int BinaryTreeSolution::maxDepth(TreeNode *root) { 
    return getTreeMaxDepth(root);
}

int maxDiameter = 0;

int getMaxDepthForMaxDiameter(TreeNode* root) {
    if (root == nullptr) {
        return 0;
    }
    
    int leftMaxDepth = getMaxDepthForMaxDiameter(root->left);
    int rightMaxDepth = getMaxDepthForMaxDiameter(root->right);
    maxDiameter = fmax(leftMaxDepth + rightMaxDepth, maxDiameter);
    return fmax(leftMaxDepth, rightMaxDepth) + 1;
}

int BinaryTreeSolution::diameterOfBinaryTree(TreeNode *root) {
    maxDiameter = 0;
    getMaxDepthForMaxDiameter(root);
    return maxDiameter;
}

